import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.GeneralSecurityException;
import java.util.Base64;
public class GenerateDesKey {
        //加密函数
        public static  byte[] encrypt(byte[] key,byte[] input) throws GeneralSecurityException {
            Cipher cipher=Cipher.getInstance("AES/ECB/PKCS5Padding");//返回实现 指定转换的Cipher对象
            SecretKey keySpec=new SecretKeySpec(key,"AES");//从给定的字节数组构造一个密钥。
            cipher.init(Cipher.ENCRYPT_MODE,keySpec);//ENCRYPT_MODE将密码初始为加密模式  ，init()用密钥初始话此密码
            return cipher.doFinal(input) ;//doFinal() 在单一部分操作中  解密和加密数据 或完成多部分操作 加密和解密
        }
        //解密函数
        public  static byte[] decrypt(byte[] key,byte[] input) throws GeneralSecurityException{
            Cipher cipher =Cipher.getInstance("AES/ECB/PKCS5Padding");//返回实现 指定转换的Cipher对象
            SecretKey secretKey=new SecretKeySpec(key,"AES");//从给定的字节数组构造一个密钥。
            cipher.init(Cipher.DECRYPT_MODE,secretKey);//DECRYPT_MODE密码初始化为解密模式 ，init用密钥初始话此密码
            return cipher.doFinal(input);//doFinal() 在单一部分操作中解密和加密数据 或完成多部分操作 加密和解密
        }

        public static void main(String[] a) throws  Exception{
        String message="加密内容.";//原文
        System.out.println("信息是:"+message);
        //密钥是0123456789000000 是用来解密的钥匙
        byte[] key="0123456789000000".getBytes("UTF-8");//以指定字符集 返会一个byte数组

        //原文 字符 转为 字节
        byte[] data=message.getBytes("UTF-8");
        //开始加密
        byte[] encrypted=encrypt(key,data);
        System.out.println("加密后密文:"+ Base64.getEncoder().encodeToString(encrypted));
        //getEncoder返回一个Base64.Encoder ，它使用Basic类型base64编码方案进行编码。
        //encodeToString 使用Base64编码方案将指定的字节数组编码为字符串。

        //解密
        byte[] decrypted=decrypt(key,encrypted);
        System.out.println("解密后原文:"+new String(decrypted,"UTF-8"));


    }
}
